package com.baidu.service.impl;

import com.baidu.entity.Category;
import com.baidu.mapper.CategoryMapper;
import com.baidu.service.CategoryService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

@Service
public class CategoryServiceImpl implements CategoryService {

    @Resource
    private CategoryMapper categoryMapper;

    @Override
    public List<Category> selectAll() {
        //查询所有分类信息
        List<Category> categoryList = categoryMapper.selectAll();
        //创建一个map用于存储category,key为category的id,值为category对象本身，相当于给每个category对象进行编号
        Map<Long, Category> categoryMap = new HashMap<>();
        for (Category category : categoryList) {
            categoryMap.put(category.getId(), category);
        }
        //组合父子节点之间的关系
        //一个节点只有两种可能，要么是根节点，要么不是根节点,我们可以创建一个新的集合来存储根节点，然后把他的子节点设置
        //到根节点的children属性中
        List<Category> rootCategoryList = new ArrayList<>(categoryList.size());
        for (Category category : categoryList) {
            //当前循环到的category是一个根节点
            if (category.getPid() == 0) {
                rootCategoryList.add(category);
            } else {
                //不是根节点 获取当前循环到的category的父节点
                Category parentCategory = categoryMap.get(category.getPid());
                //向父节点中添加当前循环到的category作为子
                parentCategory.getChildren().add(category);
            }
        }
        return rootCategoryList;
    }
}